package sensors.virtualSensors;

import java.util.Random;

public class Randomizer {
	private static final double meanUltrasonic = 0.7;
	private static final double standardDevUltrasonic = 0.9;
	private static final double meanDistance = 0.0004;
	private static final double standardDevDistance = 0.00065;
	private static final double meanAngle = -0.005/360;
	private static final double standardDevAngle = 0.6238/360;
	private static final double meanInfrared = 10.068;
	private static final double standardDevInfrared = 6.688;
	private Random generator;
	/**
	 * Initialiseer de random generator
	 */
	public Randomizer(){
		generator = new Random();
	}
	/**
	 * je random waarde wordt op de exacte afstand gesuperponeerd obv de normaalverdeling
	 * @param distance die voorlopig exact gemeten afstand is
	 * @return 
	 */
	public int ultrasonicRandom(int distance){
//		if(distance<20)
//			return distance+2;
		Double random = generator.nextGaussian();
		random = random*standardDevUltrasonic+meanUltrasonic;
		int result = (int) (distance + random);
		return result;
	}
	/**
	 * je random waarde wordt op de exacte afstand gesuperponeerd obv de normaalverdeling
	 * @param distance die voorlopig de exact afstand is om af te leggen
	 * @return 
	 */
	public int travelRandom(int distance){
		Double random = generator.nextGaussian();
		random = (random*standardDevDistance+meanDistance)*distance;
		int result = (int) (distance + random);
		return result;
	}
	/**
	 * je random waarde wordt op de exacte hoek gesuperponeerd obv de normaalverdeling
	 * @param angle die voorlopig de exacte hoek is om te roteren
	 * @return 
	 */
	public int rotateRandom(int angle){
		Double random = generator.nextGaussian();
		random = (random*standardDevAngle + meanAngle)*angle;
		int result = (int) (angle + random);
		return result;
		
	}
	/**
	 * randomwaarden voor de infraroodsensor worden gegenereerd
	 * @return 
	 */
	public double infraredRandom(){
		Double random = generator.nextGaussian();
		random = random*standardDevInfrared+meanInfrared;
		return random;
	}
}
